package com.hsnn.medstgmini.settlement.service.impl;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.transaction.Transactional;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.exception.MSException;
import com.hsnn.medstgmini.settlement.dao.SettlementFirstDao;
import com.hsnn.medstgmini.settlement.model.SetSettlement;
import com.hsnn.medstgmini.settlement.model.SetSettlementDetail;
import com.hsnn.medstgmini.settlement.model.SetSettlementfirst;
import com.hsnn.medstgmini.settlement.model.form.SetSettlementForm;
import com.hsnn.medstgmini.settlement.service.SettlementFirstManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.ConstantsUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseNumber;

@Service
public class SettlementFirstManagerImpl implements SettlementFirstManager {

	@Autowired
	private SettlementFirstDao dao;

	/**
	 * 
	 * @category 保存一级结算单信息（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午4:01:27
	 * @param data
	 */
	public void saveSettlementFirst(SetSettlement data) {
		dao.saveSettlementFirst(data);
	}

	/**
	 * 
	 * @category 获取我的一级结算单（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 上午10:35:33
	 * @param page
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getSettlementFirstDataList(Pagination page) {
		page = dao.getSettlementFirstDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page
				.getRows();
		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Map<String, Object> map = list.get(i);
				map.put("status",
						map.get("status") == null ? "" : ConstantsUtil
								.settlementStatus(map.get("status").toString()));
			}
		}
		page.setRows(list);
		return page;
	}

	/**
	 * 
	 * @category 获取勾选一级结算单明细列表数据（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午1:25:09
	 * @param page
	 * @return
	 */
	public Pagination getAddFirstDetailDataList(Pagination page) {
		return dao.getAddFirstDetailDataList(page);
	}

	/**
	 * 
	 * @category 根据结算单ID获取结算单信息
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:06:14
	 * @param firstlevelSettlementId
	 * @return
	 */
	public SetSettlementfirst getSetFirstById(String firstlevelSettlementId) {
		return dao.getSetFirstById(firstlevelSettlementId);
	}

	/**
	 * 
	 * @category 添加结算单明细（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:28:33
	 * @param page
	 * @return
	 */
	@SuppressWarnings("unchecked")
	@Transactional
	public Pagination addFirstDetail(Pagination page, SysUser loginUser) {
		List<SetSettlementDetail> list = (List<SetSettlementDetail>) page
				.getRows();
		if (null != list && list.size() > 0) {
			StringBuffer tranids = new StringBuffer();
			for (int i = 0; i < list.size(); i++) {
				SetSettlementDetail info = list.get(i);
				tranids.append("'").append(info.getBankAcctTransInfoId())
						.append("',");
			}
			SetSettlementDetail form = (SetSettlementDetail) page.getForm();
			if (StringUtils.isNotBlank(tranids.toString())) {
				String str = tranids.toString().substring(0,
						tranids.toString().length() - 1);
				if (0 == page.getCode()) {
					List<SetSettlementDetail> dlist = dao
							.getHaveSetFirstDetailList(form.getSettlementId(),
									str);
					if (null != dlist && dlist.size() > 0) {
						if (list.size() == dlist.size()) {
							page.setSuccess(false);
							page.setCode(0);
							page.setMsg("您勾选的明细已存在！不能重复添加！");
							return page;
						} else {
							page.setSuccess(false);
							page.setCode(1);
							page.setMsg("您勾选的明细有部分已存在，是否要继续添加不存在的？");
							return page;
						}
					}
				}

				try {
					dao.addFirstDetail(form, str, loginUser);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					page.setSuccess(false);
					page.setCode(0);
					page.setMsg("请求出错请联系管理员");
					return page;
				}
				return page;
			} else {
				page.setSuccess(false);
				page.setCode(0);
				page.setMsg("数据异常，请重试！");
				return page;
			}
		} else {
			page.setSuccess(false);
			page.setCode(0);
			page.setMsg("数据异常，请重试！");
			return page;
		}
	}

	/**
	 * 
	 * @category 编辑保存一级结算单信息（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午4:32:32
	 * @param data
	 */
	public void editSettlementFirst(SetSettlement data) {
		dao.editSettlementFirst(data);
	}

	/**
	 * 
	 * @category 删除一级结算单信息（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午4:42:29
	 * @param settlementId
	 */
	@Transactional
	@SuppressWarnings("unchecked")
	public Pagination deleteSettlementFirst(Pagination page) {
		List<SetSettlement> list = (List<SetSettlement>) page.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlement info = list.get(i);
				ids.add(info.getSettlementId());
			}
			if (ids != null && !ids.isEmpty()) {
				List<SetSettlement> dlist = dao.getHaveSetFirstList(ids);

				if (null != dlist && dlist.size() > 0) {
					if (list.size() == dlist.size()) {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("您勾选的结算单已提交！不能删除！");
						return page;
					} else {
						if (0 == page.getCode()) {
							page.setSuccess(false);
							page.setCode(1);
							page.setMsg("您勾选的结算单有部分已提交，是否要继删除其他结算单？");
							return page;
						}
					}

				}
				try {
					dao.deleteSettlementFirst(ids);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					throw new MSException(e.toString());
				}
				return page;
			} else {
				page.setSuccess(false);
				page.setCode(0);
				page.setMsg("数据异常，请重试！");
				return page;
			}
		} else {
			page.setSuccess(false);
			page.setMsg("数据异常，请重试！");
			return page;
		}
	}

	/**
	 * 
	 * @category 提交一级核算单（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午5:14:00
	 * @param list
	 */
	@Transactional
	@SuppressWarnings("unchecked")
	public Pagination subSettlementFirst(Pagination page) {
		List<SetSettlement> list = (List<SetSettlement>) page.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlement info = list.get(i);
				ids.add(info.getSettlementId());
			}
			if (ids != null && !ids.isEmpty()) {
				List<SetSettlement> dlist = dao.getHaveSetFirstList(ids);

				if (null != dlist && dlist.size() > 0) {
					if (list.size() == dlist.size()) {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("您勾选的结算单已提交！不能重复提交！");
						return page;
					} else {
						if (0 == page.getCode()) {
							page.setSuccess(false);
							page.setCode(1);
							page.setMsg("您勾选的结算单有部分已提交，是否要继提交剩余结算单？");
							return page;
						}
					}

				}
				SetSettlement form = (SetSettlement) page.getForm();
				try {
					for (int i = 0; i < list.size(); i++) {
						SetSettlement info = list.get(i);
						Double totalMoney = dao.getSumSetFirstMoney(info
								.getSettlementId());
						if (null != totalMoney) {
							if (0 > totalMoney) {
								page.setSuccess(false);
								page.setCode(0);
								page.setMsg("请提交总金额大于0的结算单！");
								return page;
							}
						} else {
							page.setSuccess(false);
							page.setCode(0);
							page.setMsg("数据异常，请重新操作！");
							return page;
						}
					}
					Double availableAmt = dao.getAvailableAmt(ids);
					if (null != availableAmt) {
						if (0 > availableAmt) {
							page.setSuccess(false);
							page.setCode(0);
							page.setMsg("您账户的可用余额不够支付本次提交的结算单！");
							return page;
						}
					} else {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("数据异常，请重新操作！");
						return page;
					}
					dao.subSettlementFirst(form, ids);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					throw new MSException(e.toString());
				}
				return page;
			} else {
				page.setSuccess(false);
				page.setCode(0);
				page.setMsg("数据异常，请重试！");
				return page;
			}
		} else {
			page.setSuccess(false);
			page.setMsg("数据异常，请重试！");
			return page;
		}
	}

	/**
	 * 
	 * @category 获取一级结算单明细（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午7:54:36
	 * @param page
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getSetSettlemenDetailDataList(Pagination page) {
		page = dao.getSetSettlemenDetailDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page
				.getRows();
		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Map<String, Object> map = list.get(i);
				map.put("bankAcctTransType",
						map.get("bankAcctTransType") == null ? ""
								: ConstantsUtil.payType(map.get(
										"bankAcctTransType").toString()));
			}
		}
		page.setRows(list);
		return page;
	}

	/**
	 * 
	 * @category 获取一级结算单明细（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午7:54:36
	 * @param page
	 * @return
	 */
	@Override
	public Pagination getSetSettlemenDetailList(Pagination page) {
		page = dao.getSetSettlemenDetailList(page);
		return page;
	}

	/**
	 * 
	 * @category 删除明细（医疗机构）
	 * @author 邱磊
	 * @date 2015年7月22日 下午8:25:59
	 * @param page
	 */
	@Transactional
	@SuppressWarnings("unchecked")
	public void deleteSetSettlemenFirstDetail(Pagination page, SysUser loginUser) {
		List<SetSettlementDetail> list = (List<SetSettlementDetail>) page
				.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlementDetail info = list.get(i);
				ids.add(info.getSettlementDetailId());
			}
			if (ids != null && !ids.isEmpty()) {
				dao.deleteSetSettlemenFirstDetail(
						page.getConditions().get("settlementId"), ids,
						loginUser);
			}
		}
	}

	/**
	 * 
	 * @category 删除明细（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午8:25:59
	 * @param page
	 */
	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public void delSetSettlemenFirstDetail(Pagination page, SysUser loginUser) {
		List<SetSettlementDetail> list = (List<SetSettlementDetail>) page
				.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlementDetail info = list.get(i);
				ids.add(info.getSettlementDetailId());
			}
			if (ids != null && !ids.isEmpty()) {
				String settlementId = page.getConditions().get("settlementId");
				dao.delSetSettlemenFirstDetail(settlementId, ids, loginUser);
			}

		}
	}

	/**
	 * 
	 * @category 获取一级结算单第一次审核数据（核算中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	public Pagination getAuditFirstOneDataList(Pagination page) {
		return dao.getAuditFirstOneDataList(page);
	}

	/**
	 * 
	 * @category 获取一级结算单第二次审核数据（核算中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	public Pagination getAuditFirstSecondDataList(Pagination page) {
		return dao.getAuditFirstSecondDataList(page);
	}

	/**
	 * 
	 * @category 获取二级结算单第一次审核数据（采购中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getAuditSecondOneDataList(Pagination page) {
		page = dao.getAuditSecondOneDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page
				.getRows();
		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Map<String, Object> map = list.get(i);
				map.put("status",
						map.get("status") == null ? "" : ConstantsUtil
								.settlementStatus(map.get("status").toString()));
			}
		}
		page.setRows(list);
		return page;
	}

	/**
	 * 
	 * @category 获取二级结算单第二次审核数据（采购中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getAuditSecondSecondDataList(Pagination page) {
		page = dao.getAuditSecondSecondDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page
				.getRows();
		if (null != list && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Map<String, Object> map = list.get(i);
				map.put("status",
						map.get("status") == null ? "" : ConstantsUtil
								.settlementStatus(map.get("status").toString()));
			}
		}
		page.setRows(list);
		return page;
	}

	/**
	 * 
	 * @category 根据结算单ID获取结算单信息(新表)
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:06:14
	 * @param firstlevelSettlementId
	 * @return
	 */
	public SetSettlement getSetSettlementById(String settlementId) {
		return dao.getSetSettlementById(settlementId);
	}

	/**
	 * 
	 * @category 审核一级结算单第一次（核算中心）
	 * @author 邱磊
	 * @date 2015年7月23日 下午4:45:21
	 * @param form
	 */
	@Transactional
	public void auditFirstOne(SetSettlementForm form) {
		dao.auditFirstOne(form);
	}

	/**
	 * 
	 * @category 获取一级结算单审核信息
	 * @author 邱磊
	 * @date 2015年7月23日 下午5:41:27
	 * @param settlementId
	 * @return
	 */
	public SetSettlementForm getSetFirstAuditInfo(String settlementId) {
		List<Map<String, Object>> list = dao.getSetFirstAuditInfo(settlementId);
		if (null != list && list.size() > 0) {
			Map<String, Object> map = list.get(0);
			SetSettlementForm form = new SetSettlementForm();
			if (ParseNumber.toInteger(map.get("status").toString()) < 2) {
				return null;
			} else if (ParseNumber.toInteger(map.get("status").toString()) < 4) {
				form.setStatus(ConstantsUtil.settlementStatus(map.get("status")
						.toString()));
				form.setAuditDatetime(map.get("auditDatetime") == null ? ""
						: map.get("auditDatetime").toString());
				form.setAuditUser(map.get("auditUser") == null ? "" : map.get(
						"auditUser").toString());
				form.setAuditRemark(map.get("auditRemark") == null ? "" : map
						.get("auditRemark").toString());
				form.setReauditDatetime(map.get("reauditDatetime") == null ? ""
						: map.get("reauditDatetime").toString());
				form.setReauditUser(map.get("reauditUser") == null ? "" : map
						.get("reauditUser").toString());
				form.setReauditRemark(map.get("reauditRemark") == null ? ""
						: map.get("reauditRemark").toString());
				form.setSettlementId(settlementId);
				form.setSettlementCode(map.get("settlementCode") == null ? ""
						: map.get("settlementCode").toString());
				form.setSettlementName(map.get("settlementName") == null ? ""
						: map.get("settlementName").toString());
				form.setTotalOrders(map.get("totalOrders") == null ? "" : map
						.get("totalOrders").toString());
				form.setTotalAmount(map.get("totalAmount") == null ? ""
						: ParseNumber.toStrDecimal(ParseNumber.toDouble(map
								.get("totalAmount").toString())));
				form.setCreateDatetime(map.get("createDatetime") == null ? ""
						: map.get("createDatetime").toString());
				form.setCreateUser(map.get("createUser") == null ? "" : map
						.get("createUser").toString());
				form.setRemarks(map.get("remarks") == null ? "" : map.get(
						"remarks").toString());
			} else if (ParseNumber.toInteger(map.get("status").toString()) < 6) {
				form.setStatus(ConstantsUtil.settlementStatus("2"));
				form.setAuditDatetime(map.get("auditDatetime") == null ? ""
						: map.get("auditDatetime").toString());
				form.setAuditUser(map.get("auditUser") == null ? "" : map.get(
						"auditUser").toString());
				form.setAuditRemark(map.get("auditRemark") == null ? "" : map
						.get("auditRemark").toString());
				form.setReauditDatetime(map.get("reauditDatetime") == null ? ""
						: map.get("reauditDatetime").toString());
				form.setReauditUser(map.get("reauditUser") == null ? "" : map
						.get("reauditUser").toString());
				form.setReauditRemark(map.get("reauditRemark") == null ? ""
						: map.get("reauditRemark").toString());
				form.setReStatus(map.get("restatus") == null ? "" : map.get(
						"restatus").toString());
				form.setSettlementId(settlementId);
				form.setSettlementCode(map.get("settlementCode") == null ? ""
						: map.get("settlementCode").toString());
				form.setSettlementName(map.get("settlementName") == null ? ""
						: map.get("settlementName").toString());
				form.setTotalOrders(map.get("totalOrders") == null ? "" : map
						.get("totalOrders").toString());
				form.setTotalAmount(map.get("totalAmount") == null ? ""
						: ParseNumber.toStrDecimal(ParseNumber.toDouble(map
								.get("totalAmount").toString())));
				form.setCreateDatetime(map.get("createDatetime") == null ? ""
						: map.get("createDatetime").toString());
				form.setCreateUser(map.get("createUser") == null ? "" : map
						.get("createUser").toString());
				form.setRemarks(map.get("remarks") == null ? "" : map.get(
						"remarks").toString());
			}
			return form;
		}
		return null;
	}

	/**
	 * 
	 * @category 审核一级结算单第二次（核算中心）
	 * @author 邱磊
	 * @date 2015年7月23日 下午4:45:21
	 * @param form
	 */
	@Transactional
	public void auditFirstSecond(SetSettlement form) {
		dao.auditFirstSecond(form);
	}

	/**
	 * 
	 * @category 审核一级结算单第二次（采购中心）
	 * @author 邱磊
	 * @date 2015年7月23日 下午4:45:21
	 * @param form
	 */
	public void centerAuditFirstSecond(SetSettlement form) {
		dao.centerAuditFirstSecond(form);
	}

	/**
	 * 
	 * @category 保存二级结算单信息
	 * @author 邱磊
	 * @date 2015年7月23日 下午7:14:37
	 * @param data
	 */
	public void saveSettlementSecond(SetSettlement data) {
		dao.saveSettlementSecond(data);
	}

	/**
	 * 
	 * @category 获取二级结算单（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 上午10:35:33
	 * @param page
	 * @return
	 */
	public Pagination getSettlementSecondDataList(Pagination page) {
		return dao.getSettlementSecondDataList(page);
	}

	/**
	 * 
	 * @category 获取我的结算单查看列表（核算中心）
	 * @author 徐国鹏
	 * @date 2015年7月22日 上午10:35:33
	 * @param page
	 * @return
	 */
	public Pagination getSettlementSecondDataListSee(Pagination page) {
		return dao.getSettlementSecondDataListSee(page);
	}

	/**
	 * 
	 * @category 获取可加入二级结算单明细（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午1:25:09
	 * @param page
	 * @return
	 */
	public Pagination getAddSecondDetailDataList(Pagination page) {
		return dao.getAddSecondDetailDataList(page);
	}

	/**
	 * 
	 * @category 根据结算单ID获取二级结算单信息
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:06:14
	 * @param settlementId
	 * @return
	 */
	public SetSettlement getSetSecondById(String settlementId) {
		return dao.getSetSecondById(settlementId);
	}

	/**
	 * 
	 * @category 添加二级结算单明细（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:28:33
	 * @param page
	 * @return
	 */
	@Transactional
	@SuppressWarnings("unchecked")
	public Pagination addSecondDetail(Pagination page, SysUser user) {
		List<SetSettlementDetail> list = (List<SetSettlementDetail>) page
				.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlementDetail info = list.get(i);
				ids.add(info.getSettlementId());
			}
			SetSettlementDetail form = (SetSettlementDetail) page.getForm();
			if (ids != null && !ids.isEmpty()) {
				List<SetSettlementDetail> dlist = dao
						.getHaveSetSecondDetailList(form.getSettlementId(), ids);
				if (null != dlist && dlist.size() > 0) {
					if (list.size() == dlist.size()) {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("您勾选的明细已存在！不能重复添加！");
						return page;
					} else {
						if (0 == page.getCode()) {
							page.setSuccess(false);
							page.setCode(1);
							page.setMsg("您勾选的明细有部分已存在，是否要继续添加不存在的？");
							return page;
						}
					}

				}
				try {
					dao.addSecondDetail(form, ids, user);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					page.setSuccess(false);
					page.setCode(0);
					page.setMsg("请求出错请联系管理员");
					return page;
				}
				return page;
			} else {
				page.setSuccess(false);
				page.setCode(0);
				page.setMsg("数据异常，请重试！");
				return page;
			}
		} else {
			page.setSuccess(false);
			page.setCode(0);
			page.setMsg("数据异常，请重试！");
			return page;
		}
	}

	/**
	 * 
	 * @category 根据结算单ID获取结算单信息（整改后的表）
	 * @author 邱磊
	 * @date 2015年7月22日 下午2:06:14
	 * @param settlementId
	 * @return
	 */
	public SetSettlement getSettlementById(String settlementId) {
		return dao.getSettlementById(settlementId);
	}

	/**
	 * 
	 * @category 编辑保存二级结算单信息（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午4:32:32
	 * @param data
	 */
	public void editSettlementSecond(SetSettlement data) {
		dao.editSettlementSecond(data);
	}

	/**
	 * 
	 * @category 删除二级结算单信息（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午4:42:29
	 * @param settlementId
	 */
	public void deleteSettlementSecond(List<SetSettlement> list) {
		if (list != null && !list.isEmpty()) {
			for (SetSettlement sett : list) {
				SetSettlement info = dao.getSettlementById(sett.getSettlementId());
				if (info != null && 0 == info.getStatus()) {
					dao.deleteSettlementSecond(sett.getSettlementId());
				}
			}
		}
	}

	/**
	 * 
	 * @category 提交二级核算单（核算中心）
	 * @author 邱磊
	 * @date 2015年7月22日 下午5:14:00
	 * @param list
	 */
	@SuppressWarnings("unchecked")
	public Pagination subSettlementSecond(Pagination page) {
		List<SetSettlement> list = (List<SetSettlement>) page.getRows();
		if (null != list && list.size() > 0) {
			List<String> ids = new LinkedList<String>();
			for (int i = 0; i < list.size(); i++) {
				SetSettlement info = list.get(i);
				ids.add(info.getSettlementId());
			}
			if (ids != null && !ids.isEmpty()) {
				List<SetSettlement> dlist = dao.getHaveSetSecondList(ids);

				if (null != dlist && dlist.size() > 0) {
					if (list.size() == dlist.size()) {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("您勾选的结算单已提交！不能重复提交！");
						return page;
					} else {
						if (0 == page.getCode()) {
							page.setSuccess(false);
							page.setCode(1);
							page.setMsg("您勾选的结算单有部分已提交，是否要继提交剩余结算单？");
							return page;
						}
					}

				}
				SetSettlement form = (SetSettlement) page.getForm();
				try {
					Double availableAmt = dao.getSecondAvailableAmt(ids);
					if (null != availableAmt) {
						if (0 > availableAmt) {
							page.setSuccess(false);
							page.setCode(0);
							page.setMsg("您账户的可用余额不够支付本次提交的结算单！");
							return page;
						}
					} else {
						page.setSuccess(false);
						page.setCode(0);
						page.setMsg("数据异常，请重新操作！");
						return page;
					}
					dao.subSettlementSecond(form, ids);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					throw new MSException(e.toString());
				}
				return page;
			} else {
				page.setSuccess(false);
				page.setCode(0);
				page.setMsg("数据异常，请重试！");
				return page;
			}
		} else {
			page.setSuccess(false);
			page.setCode(0);
			page.setMsg("数据异常，请重试！");
			return page;
		}
	}

	public Pagination getHospSettleList(Pagination page) {
		return dao.getHospSettleList(page);
	}

	/**
	 * 
	 * @category 根据结算单Id查询信息
	 * @author 邱磊
	 * @date 2015年7月24日 下午5:33:12
	 * @param settlementId
	 * @return
	 */
	public SetSettlementForm getSettlementInfoById(String settlementId) {
		Map<String, Object> info = dao.getSettlementInfoById(settlementId);
		SetSettlementForm form = new SetSettlementForm();
		if (null != info) {
			form.setSettlementId(info.get("settlementId") == null ? "" : info
					.get("settlementId").toString());
			form.setSettlementCode(info.get("settlementCode") == null ? ""
					: info.get("settlementCode").toString());
			form.setSettlementName(info.get("settlementName") == null ? ""
					: info.get("settlementName").toString());
			form.setTotalOrders(info.get("totalOrders") == null ? "" : info
					.get("totalOrders").toString());
			form.setTotalAmount(info.get("totalAmount") == null ? ""
					: ParseNumber.toStrDecimal(ParseNumber.toDouble(info.get(
							"totalAmount").toString())));
			form.setCreateDatetime(info.get("createDatetime") == null ? ""
					: info.get("createDatetime").toString());
			form.setCreateUser(info.get("createUser") == null ? "" : info.get(
					"createUser").toString());
			form.setRemarks(info.get("remarks") == null ? "" : info.get(
					"remarks").toString());
			form.setSubmitUser(info.get("submitUser") == null ? "" : info.get(
					"submitUser").toString());
			form.setSubmitDatetime(info.get("submitDatetime") == null ? ""
					: info.get("submitDatetime").toString());
			form.setStatus(info.get("status") == null ? "" : ConstantsUtil
					.settlementStatus(info.get("status").toString()));
			form.setAuditDatetime(info.get("auditDatetime") == null ? "" : info
					.get("auditDatetime").toString());
			form.setAuditUser(info.get("auditUser") == null ? "" : info.get(
					"auditUser").toString());
			form.setAuditRemark(info.get("auditRemark") == null ? "" : info
					.get("auditRemark").toString());
			form.setReauditDatetime(info.get("reauditDatetime") == null ? ""
					: info.get("reauditDatetime").toString());
			form.setReauditUser(info.get("reauditUser") == null ? "" : info
					.get("reauditUser").toString());
			form.setReauditRemark(info.get("reauditRemark") == null ? "" : info
					.get("reauditRemark").toString());
			form.setSettlementType(info.get("settlement_type") == null ? ""
					: ConstantsUtil.settlementType(info.get("settlement_type")
							.toString()));
		}
		return form;
	}

	public Pagination hospSettleAuditList(Pagination page) {
		return dao.hospSettleAuditList(page);
	}

	public Pagination getChildSettlementList(Pagination page) {
		return dao.getChildSettlementList(page);
	}

	public Pagination getSetSettletdetailinfoList(Pagination page) {
		return dao.getSetSettletdetailinfoList(page);
	}

	/**
	 * 
	 * @category 获取初审核查看页面数据（核算中心，采购中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	public Pagination getAuditSettlementSeeDataList(Pagination page) {
		return dao.getAuditSettlementSeeDataList(page);
	}

	/**
	 * 
	 * @category 获取复审核查看页面数据（核算中心，采购中心）
	 * @author 邱磊
	 * @date 2015年7月23日 上午11:03:49
	 * @param page
	 * @return
	 */
	public Pagination getRAuditSettlementSeeDataList(Pagination page) {
		return dao.getRAuditSettlementSeeDataList(page);
	}

	public Pagination auditPass(Pagination page) {
		return dao.auditPass(page);
	}

	public Pagination auditUnPass(Pagination page) {
		return dao.auditUnPass(page);
	}

	public Pagination reAuditPass(Pagination page) {
		return dao.reAuditPass(page);
	}

	public Pagination reAuditUnPass(Pagination page) {
		return dao.reAuditUnPass(page);
	}

	@Override
	public Object getSettlementDetailInfoBysetSettlementId(Pagination page) {
		return dao.getSettlementDetailInfoBysetSettlementId(page);
	}

	@Override
	public Pagination getSettlementDataList(Pagination page) {
		return dao.getSettlementDataList(page);
	}
	
	/**
	 * @category 检测名称是否存在
	 * @date 2015年8月11日
	 * @param settlement
	 * @return
	 */
	public boolean checkSameName(SetSettlement settlement) {
		return dao.checkSameName(settlement);
	}

}
